package com.thread;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;

//ArrayList和LinkedList以及HashSet集合在多线程里面也是不安全的
public class SyncApiDemo3 {
    public static void main(String[] args) {
        Collection<Integer> c = new ArrayList<>();
        //Collection<Integer> c = new LinkedList<>();
        //Collection<Integer> c = new HashSet<>();

        //Collection<Integer> c = Collections.synchronizedCollection(new ArrayList<>());

        //将集合包装成线程安全的
        //该函数的作用是将集合c转换为同步集合，并返回转换后的集合。
        // 转换后的集合可以在多线程环境下安全使用，避免了并发访问造成的数据不一致问题。
        Collection<Integer> integers = Collections.synchronizedCollection(c);

        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 1000; i++) {
                    integers.add(i);
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 1000; i < 2000; i++) {
                    integers.add(i);
                }
            }
        }).start();

        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        System.out.println(integers.size());
    }
}
